sunshine moonlight 配置linux第二屏幕
·
Table of Contents
安装sunshine和moonlight
# 服务端安装sunshine(需要扩展屏幕主机)
# https://github.com/LizardByte/Sunshine/releases/tag/v2025.924.154138
sudo apt install ./sunshine-ubuntu-24.04-amd64.deb
# 客户端安装moonlight(作为第二屏幕的主机)
sudo flatpak install com.moonlight_stream.Moonlight
虚拟显示器?
使用 Wayland + vkms + Weston headless
modinfo vkms | grep filename
sudo modprobe vkms
ls /sys/class/drm | grep card
# /etc/modprobe.d/vkms.conf
# 示例:创建两个 vkms 虚拟显示器
options vkms nodes=2
sudo apt install libdrm-tests
modetest -M vkms | grep -i connect
sudo apt install wlroots-utils
vainfo --display drm --device /dev/dri/renderD128
pactl info
sudo apt install -y x11-xserver-utils weston
# 主要是 modetest 检查 DRM 输出,Wayland 原生可以使用 wlr-randr 或 Weston 的虚拟输出测试
weston --backend=headless-backend.so --socket=wayland-headless-0
sudo apt install edid-decode read-edid
sudo get-edid > /lib/firmware/edid/1080p.bin
sudo tee /etc/modprobe.d/vkms.conf <<'EOF'
options vkms enable_cursor=1 enable_overlay=1 edid_firmware=edid/1080p.bin
EOF
sudo modprobe -r vkms
sudo modprobe vkms
cat /sys/class/drm/card0-Virtual-1/edid | edid-decode
sudo cat /sys/kernel/debug/dri/0/state
modetest -M vkms -s 63@38:1920x1080
sudo udevadm trigger --subsystem-match=drm --action=change
sudo apt install drm-info
drm_info /dev/dri/card0
debian13 中没有vkms?
| 特性 | vkms | virtio-gpu | qxl | dummy X11 |
|---|---|---|---|---|
| 驱动位置 | 内核 DRM | 内核 DRM | 内核 DRM | 用户态 X11 |
| 显示输出 | ✅ DRM 原生 | ✅ DRM 原生 | ✅ DRM 原生 | ❌ 无 DRM 节点 |
| 硬件依赖 | 无(纯虚拟) | 需虚拟化环境 | 需 QEMU/SPICE | 无 |
| 性能 | 软件模拟,较慢 | 中等 | 中等 | 慢 |
| Sunshine 兼容 | ✅ | ✅ | ✅ | ⚠️ 需 Xwayland |
| GNOME 可识别 | ✅ | ✅ | ✅ | ✅ |
配置KMS
- 在电脑上安装 Sunshine,平板上安装 Moonlight,确保能搜索到并能正常控制电脑;
- 用下面的命令枚举所有设备接口的连接情况,选择一个未连接(disconnected)的 HDMI 接口(如 HDMI-A-1),记下它:
for p in /sys/class/drm/*/status; do con=${p%/status}; echo -n "${con#*/card?-}: "; cat $p; done
- 在 /usr/lib/firmware/ 下创建一个新的 edid 目录(如果没有),并将你的 edid 文件放在那里。例如 /usr/lib/firmware/edid/samsung-q800t-hdmi2.1;
- 编辑内核参数,添加以下内容。其中 HDMI-A-1 是你选择的接口,edid/samsung-q800t-hdmi2.1 是你的 EDID 文件。注意不要漏了最后的 :e:
- drm.edid_firmware=HDMI-A-1:edid/samsung-q800t-hdmi2.1 video=HDMI-A-1:e
- 重启电脑。如果一切正常,你的电脑会认为有一个新的 HDMI 显示器连接上了,而实际上它是一个虚拟显示器;
- 在命令行中运行 sunshine,查看其输出的 KMS Monitor List,找到你的 HDMI 接口对应的编号,停止 Sunshine;
- 在正常启动的 Sunshine 的设置中填入上一步的编号,应用设置,确定其投屏的来源是你的虚拟显示器。
- 这样就完成了,你可以在 KDE 设置中像普通显示器那样配置该虚拟显示器的分辨率和空间位置,甚至可以在不用时禁用该显示器。